package com.atguigu.gmall.product.controller.api;

import com.atguigu.gmall.model.list.SearchAttr;
import com.atguigu.gmall.model.product.*;
import com.atguigu.gmall.product.service.ManagerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * @author wk
 * @create 2021-08-29 11:03
 * 商品详情页面所需要的数据
 */
@RestController
@RequestMapping("/api/product")
@Api(tags = "商品详情对外接口")
public class ProductApiController {

    @Autowired
    private ManagerService managerService;

    /**
     * https://item.jd.com/100016034372.html
     *
     * @param skuId 库存id 100016034372
     * @return 库存信息
     */
    @GetMapping("/inner/getSkuInfo/{skuId}")
    @ApiOperation("获取库存信息和图片")
    public SkuInfo getSkuInfo(@PathVariable Long skuId) {
        return managerService.getSkuInfo(skuId);
    }

    /**
     * @param category3Id 三级标题id
     * @return 一二三级分类视图
     */
    @ApiOperation("根据三级标题id获取一二三级分类视图")
    @GetMapping("inner/getCategoryView/{category3Id}")
    public BaseCategoryView getBaseCategoryView(@PathVariable Long category3Id) {
        return managerService.getBaseCategoryView(category3Id);
    }

    /**
     * @param skuId 库存id
     * @return 返回对应商品的价格
     * 商品价格使用 BigDecimal
     */
    @ApiOperation("根据库存id获取价格信息")
    @GetMapping("inner/getSkuPrice/{skuId}")
    public BigDecimal getSkuPrice(@PathVariable Long skuId) {
        return managerService.getSkuPrice(skuId);
    }

    /**
     * @param skuId
     * @param spuId
     * @return 销售属性集合和属性值集合
     */
    @ApiOperation("根据spuId，skuId 查询销售属性及值集合")
    @GetMapping("inner/getSpuSaleAttrListCheckBySku/{skuId}/{spuId}")
    public List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(@PathVariable Long skuId, @PathVariable Long spuId) {
        return managerService.getSpuSaleAttrListCheckBySku(skuId, spuId);
    }

    /**
     * 后台要生成一个“属性值1|属性值2|属性值3：skuId”的一个json串以提供页面进行匹配
     *
     * @param spuId
     * @return 返回一个map集合用来封装属性id数据和库存id
     */
    @ApiOperation("根据spuId 查询不同销售属性值组合和库存id")
    @GetMapping("/inner/getSkuValueIdsMap/{spuId}")
    public Map getSkuValueIdsMap(@PathVariable Long spuId) {
        return managerService.getSkuValueIdsMap(spuId);
    }

    /**
     * 首页数据展示
     *
     * @return
     */
    @GetMapping("/inner/getBaseCategoryViewList")
    @ApiOperation("查询所有的一二三级分类列表")
    public List<BaseCategoryView> getBaseCategoryViewList() {
        return managerService.getBaseCategoryViewList();
    }

    /**
     * 获取品牌相关信息
     *
     * @param tmId
     * @return
     */
    @GetMapping("/inner/getBaseTrademark/{tmId}")
    public BaseTrademark getBaseTrademark(@PathVariable Long tmId) {
        return managerService.getBaseTrademark(tmId);
    }

    // 获取库存的平台属性
    @GetMapping("/inner/getSkuAttrValue/{skuId}")
    public List<SkuAttrValue> getSkuAttrValue(@PathVariable Long skuId) {
        return managerService.getSkuAttrValue(skuId);
    }
}
